﻿using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Text;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.Web.Script.Serialization;

namespace CitaTest
{
    [TestClass]
    public class UnitTest1
    {
        

        [TestMethod]
        public void VeterinarioNoDisponible()
        {
            //Prueba de creacion de CITA
            //Se dara este mensaje cuando la cita que intente ingresar no este disponible porque el veterinario y la fecha estan ocupadas
            string postdata = "{\"FechaCita\":\"\\/Date(1376139600000)\\/\",\"EstadoCita\":{\"IdEstado\":1,\"txtEstado\":\"\"},\"Producto\":{\"IdProducto\":1,\"txtProducto\":\"Baño\"},\"Veterinario\":{\"IdVeterinario\":1,\"numCVP\":\"3425\",\"txtVeterinarioApellidoM\":\"Cortez\",\"txtVeterinarioApellidoP\":\"Mangueras\",\"txtVeterinarioNombre\":\"Juan\"},\"Paciente\":{\"Cliente\":{\"Activo\":true,\"NumDocumento\":\"11111111\",\"idCliente\":1,\"txtClienteApellido\":\"Silva\",\"txtClienteNombre\":\"Peter A\"},\"IdEstadoPaciente\":1,\"IdPaciente\":1,\"txtPaciente\":\"Rocky\"},\"Diagnositco\":\"\"}";//JSON
            byte[] data = Encoding.UTF8.GetBytes(postdata);

            HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://localhost:23000/CitaService.svc/Citas");
            req.Method = "POST";
            req.ContentLength = data.Length;
            req.ContentType = "application/json";

            var reqStream = req.GetRequestStream();
            reqStream.Write(data, 0, data.Length);

            HttpWebResponse res = null;
            try 
            {
                res = (HttpWebResponse)req.GetResponse();
                StreamReader reader = new StreamReader(res.GetResponseStream());
                string alumnoJSON = reader.ReadToEnd();
                JavaScriptSerializer js = new JavaScriptSerializer();
                Cita citaCreada = js.Deserialize<Cita>(alumnoJSON);
            }
            catch (WebException wex)
            {
                HttpWebResponse resError = (HttpWebResponse)wex.Response;
                StreamReader reader2 = new StreamReader(resError.GetResponseStream());
                string error = reader2.ReadToEnd();
                JavaScriptSerializer js = new JavaScriptSerializer();
                MensajeRetornoWS errormessage = js.Deserialize<MensajeRetornoWS>(error);
                Assert.AreEqual("El veterinario y la hora de cita seleccionada no esta disponible", errormessage.txtMensaje);
            }
            
        }

        [TestMethod]
        public void MasdeUnaCitaPacientePorDia()
        {
            string postdata = "{\"FechaCita\":\"\\/Date(1376139600000)\\/\",\"EstadoCita\":{\"IdEstado\":1,\"txtEstado\":\"\"},\"Producto\":{\"IdProducto\":1,\"txtProducto\":\"Baño\"},\"Veterinario\":{\"IdVeterinario\":2,\"numCVP\":\"12345678\",\"txtVeterinarioApellidoM\":\"Roche\",\"txtVeterinarioApellidoP\":\"Malingas\",\"txtVeterinarioNombre\":\"Wilmar\"},\"Paciente\":{\"Cliente\":{\"Activo\":true,\"NumDocumento\":\"11111111\",\"idCliente\":1,\"txtClienteApellido\":\"Silva\",\"txtClienteNombre\":\"Peter A\"},\"IdEstadoPaciente\":1,\"IdPaciente\":1,\"txtPaciente\":\"Rocky\"},\"Diagnositco\":\"\"}";//JSON
            byte[] data = Encoding.UTF8.GetBytes(postdata);

            HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://localhost:23000/CitaService.svc/Citas");
            req.Method = "POST";
            req.ContentLength = data.Length;
            req.ContentType = "application/json";

            var reqStream = req.GetRequestStream();
            reqStream.Write(data, 0, data.Length);

            HttpWebResponse res = null;
            try
            {
                res = (HttpWebResponse)req.GetResponse();
                StreamReader reader = new StreamReader(res.GetResponseStream());
                string alumnoJSON = reader.ReadToEnd();
                JavaScriptSerializer js = new JavaScriptSerializer();
                Cita citaCreada = js.Deserialize<Cita>(alumnoJSON);
            }
            catch (WebException wex)
            {
                HttpWebResponse resError = (HttpWebResponse)wex.Response;
                StreamReader reader2 = new StreamReader(resError.GetResponseStream());
                string error = reader2.ReadToEnd();
                JavaScriptSerializer js = new JavaScriptSerializer();
                MensajeRetornoWS errormessage = js.Deserialize<MensajeRetornoWS>(error);
                Assert.AreEqual("No puede haber mas de una cita por paciente en un mismo dia", errormessage.txtMensaje);
            }

        }
    }
}
